package logicaDatos;

import java.sql.*;
import java.util.*;
import java.util.Map.Entry;

import comun.Constantes.tablas;
import logicaNegocio.*;

public class ConversorBD {

	private AccesoBD abd;

	public ConversorBD() {
		abd = new AccesoBD();
	}

	public void guardarProfesor(Profesor P) {
		abd.establecerConexion();

		String addProf = "INSERT INTO PROFESOR VALUES ('" + P.getDni() + "', '"
				+ P.getNombre() + "','" + P.getApellido() + "','"
				+ P.getDireccion() + "'," + P.getTelefono() + "," + P.getEdad()
				+ "," + P.getSueldo() + ",'" + P.getGenero() + "');";
		try {

			abd.insertar(addProf);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		abd.cerrarConexion();

	}

	public void guardarAlumno(Alumno A) {
		abd.establecerConexion();

		String addAl = "INSERT INTO ALUMNO VALUES ('" + A.getDni() + "','"
				+ A.getNombre() + "','" + A.getApellido() + "','"
				+ A.getDireccion() + "'," + A.getTelefono() + "," + A.getEdad()
				+ "," + A.getGrado().getID() + ",'" + A.getAvatar() + "','"
				+ A.getGenero() + "');";
		try {

			abd.insertar(addAl);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		abd.cerrarConexion();
	}

	public void guardarAula(Aula A) {
		abd.establecerConexion();

		String addAula = "INSERT INTO AULA (AFORO, ID_CAMPUS) VALUES ("
				+ A.getAforoAula() + "," + A.getCampus().getID() + ");";
		try {

			abd.insertar(addAula);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		abd.cerrarConexion();
	}

	public void guardarCampus(Campus C)// FALTA NUMERO ALUMNOS EN BD
	{
		abd.establecerConexion();

		String addCamp = "INSERT INTO CAMPUS (NOMBRE_CAMPUS, CIUDAD_CAMPUS,TELEFONO_CAMPUS,NUMERO_ALUMNOS)VALUES ('"
				+ C.getNombreCampus()
				+ "','"
				+ C.getCiudadCampus()
				+ "',"
				+ C.getTelefonoCampus() + "," + C.getNoAlumnos() + ");";

		try {

			abd.insertar(addCamp);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		abd.cerrarConexion();
	}

	public void guardarGrado(Grado G) {
		abd.establecerConexion();

		String addGrado = "INSERT INTO GRADO (NOMBRE_GRADO, INFORMACION_ECONOMICA, CARACTERISTICAS_GRADO, ID_CAMPUS) VALUES ('"
				+ G.getNombreGrado()
				+ "',"
				+ G.getInforEconomica()
				+ ",'"
				+ G.getCaracteristicasGrado()
				+ "',"
				+ G.getCampus().getID()
				+ ");";
		try {

			abd.insertar(addGrado);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		abd.cerrarConexion();
	}

	public void guardarAsignatura(Asignatura A) {
		abd.establecerConexion();

		String addAsig = "INSERT INTO ASIGNATURA (NOMBRE_ASIGNATURA,NUMERO_CREDITOS,CARACTERISTICAS_ASIGNATURA)VALUES ('"
				+ A.getNombreAsignatura()
				+ "',"
				+ A.getNumeroCreditos()
				+ ",'"
				+ A.getCaracteristicasAsignatura() + "');";
		try {

			abd.insertar(addAsig);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		abd.cerrarConexion();
	}

	public void guardarClase(Clase C) {
		abd.establecerConexion();

		String addCl = "INSERT INTO CLASE VALUES (" + C.getAsignatura().getID()
				+ ",'" + C.getProfesor().getDni() + "'," + C.getAula().getID()
				+ ");";
		try {

			abd.insertar(addCl);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		abd.cerrarConexion();
	}

	public void guardarPerteneces(Pertenece P) {
		abd.establecerConexion();

		String addAG = "INSERT INTO ASIGNATURA_GRADO VALUES ("
				+ P.getAsignatura().getID() + "," + P.getGrado().getID() + ");";
		try {

			abd.insertar(addAG);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		abd.cerrarConexion();
	}

	public Map<String, Profesor> leerProfesor() {

		abd.establecerConexion();

		Map<String, Profesor> retorno = new HashMap<String, Profesor>();
		try {
			ResultSet rs = abd.leerTodo("PROFESOR");

			while (rs.next()) {
				String Nombre = rs.getString("NOMBRE_PROFESOR");
				String Apellido = rs.getString("APELLIDO_PROFESOR");
				String Direccion = rs.getString("DIRECCION");
				int Telefono = rs.getInt("TELEFONO");
				String Dni = rs.getString("DNI_PROFESOR");
				String Genero = rs.getString("GENERO");

				if (Genero == null) {
					Genero = "M";
				}
				int Edad = rs.getInt("EDAD");
				Float Sueldo = rs.getFloat("SUELDO");

				Profesor P = new Profesor(Nombre, Apellido, Direccion,
						Telefono, Dni, Edad, Sueldo, Genero);

				retorno.put(P.getDni(), P);

			}
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

		return retorno;

	}

	public Map<String, Alumno> leerAlumno() {

		abd.establecerConexion();

		Map<String, Alumno> retorno = new HashMap<String, Alumno>();
		try {
			ResultSet rs = abd.leerTodo("ALUMNO");

			while (rs.next()) {
				Alumno A = new Alumno(rs.getString("NOMBRE_ALUMNO"),
						rs.getString("APELLIDO_ALUMNO"),
						rs.getString("DIRECCION"), rs.getInt("TELEFONO"),
						rs.getString("DNI_ALUMNO"), rs.getInt("EDAD"),
						rs.getString("AVATAR"), rs.getString("GENERO"));
				String condicion = " ID_GRADO = " + rs.getInt("ID_GRADO");
				ResultSet rsrs = abd.leerCondicion("GRADO", condicion);
				Grado G = new Grado(rsrs.getString("NOMBRE_GRADO"),
						rsrs.getString("CARACTERISTICAS_GRADO"),
						rsrs.getFloat("INFORMACION_ECONOMICA"),
						rsrs.getInt("ID_GRADO"));

				condicion = " ID_CAMPUS = " + rsrs.getInt("ID_CAMPUS");
				ResultSet rsrs2 = abd.leerCondicion("CAMPUS", condicion);
				Campus C = new Campus(rsrs2.getString("NOMBRE_CAMPUS"),
						rsrs2.getString("CIUDAD_CAMPUS"),
						rsrs2.getInt("TELEFONO_CAMPUS"),
						rsrs2.getInt("NUMERO_ALUMNOS"),
						rsrs2.getInt("ID_CAMPUS"));

				G.setCampus(C);

				A.setGrado(G);

				retorno.put(A.getDni(), A);

			}
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

		return retorno;
	}

	public ArrayList<Aula> leerAula() {

		abd.establecerConexion();

		ArrayList<Aula> retorno = new ArrayList<Aula>();
		try {
			ResultSet rs = abd.leerTodo("AULA");

			while (rs.next()) {

				String condicion = " ID_CAMPUS = " + rs.getInt("ID_CAMPUS");
				ResultSet rsrs = abd.leerCondicion("CAMPUS", condicion);
				Campus C = new Campus(rsrs.getString("NOMBRE_CAMPUS"),
						rsrs.getString("CIUDAD_CAMPUS"),
						rsrs.getInt("TELEFONO_CAMPUS"),
						rsrs.getInt("NUMERO_ALUMNOS"), rsrs.getInt("ID_CAMPUS"));

				Aula A = new Aula(rs.getInt("AFORO"), rs.getInt("ID_AULA"), C);
				A.setID(rs.getInt("ID_AULA"));

				retorno.add(A);

			}
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

		return retorno;
	}

	public ArrayList<Campus> leerCampus() {

		abd.establecerConexion();

		ArrayList<Campus> retorno = new ArrayList<Campus>();
		try {
			ResultSet rs = abd.leerTodo("CAMPUS");

			while (rs.next()) {
				Campus C = new Campus(rs.getString("NOMBRE_CAMPUS"),
						rs.getString("CIUDAD_CAMPUS"),
						rs.getInt("TELEFONO_CAMPUS"),
						rs.getInt("NUMERO_ALUMNOS"), rs.getInt("ID_CAMPUS"));

				retorno.add(C);

			}
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

		return retorno;
	}

	public Map<String, Grado> leerGrado() {

		abd.establecerConexion();

		Map<String, Grado> retorno = new HashMap<String, Grado>();
		try {
			ResultSet rs = abd.leerTodo("GRADO");

			while (rs.next()) {
				Grado G = new Grado(rs.getString("NOMBRE_GRADO"),
						rs.getString("CARACTERISTICAS_GRADO"),
						rs.getFloat("INFORMACION_ECONOMICA"),
						rs.getInt("ID_GRADO"));

				String condicion = " ID_CAMPUS = " + rs.getInt("ID_CAMPUS");
				ResultSet rsrs2 = abd.leerCondicion("CAMPUS", condicion);
				Campus C = new Campus(rsrs2.getString("NOMBRE_CAMPUS"),
						rsrs2.getString("CIUDAD_CAMPUS"),
						rsrs2.getInt("TELEFONO_CAMPUS"),
						rsrs2.getInt("NUMERO_ALUMNOS"),
						rsrs2.getInt("ID_CAMPUS"));

				G.setCampus(C);
				retorno.put(rs.getString("ID_GRADO"), G);

			}
		} catch (SQLException e) {

		}

		abd.cerrarConexion();
		return retorno;
	}

	public ArrayList<Asignatura> leerAsignatura() {

		abd.establecerConexion();

		ArrayList<Asignatura> retorno = new ArrayList<Asignatura>();
		try {
			ResultSet rs = abd.leerTodo("ASIGNATURA");

			while (rs.next()) {

				Asignatura A = new Asignatura(
						rs.getString("NOMBRE_ASIGNATURA"),
						rs.getInt("NUMERO_CREDITOS"),
						rs.getString("CARACTERISTICAS_ASIGNATURA"),
						rs.getInt("ID_ASIGNATURA"));

				retorno.add(A);

			}
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

		return retorno;
	}

	public ArrayList<Clase> leerClase() {

		ArrayList<Asignatura> Asignaturas = leerAsignatura();
		ArrayList<Aula> Aulas = leerAula();
		Map<String, Profesor> Profesores = leerProfesor();

		abd.establecerConexion();
		ArrayList<Clase> retorno = new ArrayList<Clase>();
		try {
			ResultSet rs = abd.leerTodo("CLASE");

			while (rs.next()) {
				Asignatura As = null;
				Aula Aul = null;
				Profesor Pr = null;
				for (int i = 0; i < Asignaturas.size(); i++) {
					Asignatura A = Asignaturas.get(i);
					if (A.getID() == (rs.getInt("ID_ASIGNATURA"))) {
						As = A;
					}
				}

				for (int i = 0; i < Aulas.size(); i++) {
					Aula Au = Aulas.get(i);
					if (Au.getID() == (rs.getInt("ID_AULA"))) {
						Aul = Au;
					}
				}

				Iterator<Entry<String, Profesor>> it = Profesores.entrySet()
						.iterator();

				while (it.hasNext()) {
					Entry<String, Profesor> e = it.next();
					Profesor P = (Profesor) Profesores.get(e.getKey());

					if (P.getDni().equals(rs.getString("DNI_PROFESOR"))) {
						Pr = P;
					}
				}

				retorno.add(new Clase(As, Pr, Aul));
			}
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

		return retorno;
	}

	public ArrayList<Pertenece> leerPertenece() {

		abd.establecerConexion();

		ArrayList<Pertenece> retorno = new ArrayList<Pertenece>();
		try {
			ResultSet rs = abd.leerTodo("ASIGNATURA_GRADO");

			while (rs.next()) {

				String condicion = " ID_ASIGNATURA = "
						+ rs.getInt("ID_ASIGNATURA");
				ResultSet rsrs = abd.leerCondicion("ASIGNATURA", condicion);
				Asignatura As = new Asignatura(
						rsrs.getString("NOMBRE_ASIGNATURA"),
						rsrs.getInt("NUMERO_CREDITOS"),
						rsrs.getString("CARACTERISTICAS_ASIGNATURA"),
						rsrs.getInt("ID_ASIGNATURA"));

				condicion = " ID_GRADO = " + rs.getInt("ID_GRADO");
				rsrs = abd.leerCondicion("GRADO", condicion);

				Grado G = new Grado(rsrs.getString("NOMBRE_GRADO"),
						rsrs.getString("CARACTERISTICAS_GRADO"),
						rsrs.getFloat("INFORMACION_ECONOMICA"),
						rsrs.getInt("ID_GRADO"));

				condicion = " ID_CAMPUS = " + rsrs.getInt("ID_CAMPUS");

				ResultSet rsrs2 = abd.leerCondicion("CAMPUS", condicion);
				Campus C = new Campus(rsrs2.getString("NOMBRE_CAMPUS"),
						rsrs2.getString("CIUDAD_CAMPUS"),
						rsrs2.getInt("TELEFONO_CAMPUS"),
						rsrs2.getInt("NUMERO_ALUMNOS"),
						rsrs2.getInt("ID_CAMPUS"));

				G.setCampus(C);

				retorno.add(new Pertenece(As, G));
			}
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

		return retorno;
	}

	public void borrarProfesor(Profesor P) {

		abd.establecerConexion();
		try {

			String condicion = " DNI_PROFESOR = " + P.getDni();
			abd.borrar(tablas.PROFESOR, condicion);
		} catch (SQLException e) {

		}
		abd.cerrarConexion();

	}

	public void borrarAlumno(Alumno A) {

		abd.establecerConexion();
		try {

			String condicion = " DNI_ALUMNO = " + A.getDni();
			abd.borrar(tablas.ALUMNO, condicion);
		} catch (SQLException e) {

		}
		abd.cerrarConexion();

	}

	public void borrarAula(Aula A) {

		abd.establecerConexion();
		try {

			String condicion = " ID_AULA = " + A.getID();
			abd.borrar(tablas.AULA, condicion);
		} catch (SQLException e) {

		}
		abd.cerrarConexion();

	}

	public void borrarCampus(Campus C) {

		abd.establecerConexion();
		try {

			String condicion = " ID_CAMPUS = " + C.getID();
			abd.borrar(tablas.CAMPUS, condicion);
		} catch (SQLException e) {

		}
		abd.cerrarConexion();

	}

	public void borrarGrado(Grado G) {

		abd.establecerConexion();
		try {

			String condicion = " ID_GRADO = " + G.getID();
			abd.borrar(tablas.GRADO, condicion);
		} catch (SQLException e) {

		}
		abd.cerrarConexion();

	}

	public void borrarAsignatura(Asignatura A) {

		abd.establecerConexion();
		try {

			String condicion = " ID_ASIGNATURA = " + A.getID();
			abd.borrar(tablas.ASIGNATURA, condicion);
		} catch (SQLException e) {

		}
		abd.cerrarConexion();

	}

	public void borrarClase(Clase C) {

		abd.establecerConexion();
		try {

			String condicion = " ID_ASIGNATURA = " + C.getAsignatura().getID()
					+ " AND ID_AULA = " + C.getAula().getID()
					+ " AND DNI_PROFESOR = " + C.getProfesor().getDni();
			abd.borrar(tablas.CLASE, condicion);
		} catch (SQLException e) {

		}
		abd.cerrarConexion();

	}

	public void borrarPertenece(Pertenece P) {

		abd.establecerConexion();
		try {

			String condicion = " ID_ASIGNATURA = " + P.getAsignatura().getID()
					+ " AND ID_GRADO = " + P.getGrado().getID();
			abd.borrar(tablas.ASIGNATURA_GRADO, condicion);
		} catch (SQLException e) {

		}
		abd.cerrarConexion();

	}

	public void actualizarProfesor(Profesor P, Object claveProfesor) {
		abd.establecerConexion();

		String condicion2 = " DNI_PROFESOR = " + claveProfesor;
		String condicion = "DNI_PROFESOR = '" + P.getDni()
				+ "', NOMBRE_PROFESOR = '" + P.getNombre()
				+ "' , APELLIDO_PROFESOR = '" + P.getApellido()
				+ "' , DIRECCION = '" + P.getDireccion() + "' , TELEFONO = "
				+ P.getTelefono() + ",  EDAD =  " + P.getEdad() + ", SUELDO = "
				+ P.getSueldo() + ", GENERO = '" + P.getGenero() + "'";

		try {
			abd.modificar(tablas.PROFESOR, condicion, condicion2);
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

	}

	public void actualizarAlumno(Alumno A, Object claveAlumno) {
		abd.establecerConexion();

		String condicion2 = " DNI_ALUMNO = " + claveAlumno;
		String condicion = "DNI_ALUMNO = '" + A.getDni() + "', AVATAR = '"
				+ A.getAvatar() + "', NOMBRE_ALUMNO = '" + A.getNombre()
				+ "', GENERO = '" + A.getGenero() + "' , APELLIDO_ALUMNO = '"
				+ A.getApellido() + "' , DIRECCION = '" + A.getDireccion()
				+ "' , TELEFONO = " + A.getTelefono() + ",  EDAD =  "
				+ A.getEdad() + "";

		try {
			abd.modificar(tablas.ALUMNO, condicion, condicion2);
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

	}

	public void actualizarAsignatura(Asignatura A, int ID_Asignatura) {
		abd.establecerConexion();

		String condicion2 = " ID_ASIGNATURA = " + ID_Asignatura;
		String condicion = "NOMBRE_ASIGNATURA = '" + A.getNombreAsignatura()
				+ "',NUMERO_CREDITOS = " + A.getNumeroCreditos()
				+ " , CARACTERISTICAS_ASIGNATURA = '"
				+ A.getCaracteristicasAsignatura() + "'";

		try {
			abd.modificar(tablas.ASIGNATURA, condicion, condicion2);
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

	}

	public void actualizarAula(Aula A, int ID_Aula) {
		abd.establecerConexion();

		String condicion2 = " ID_AULA = " + ID_Aula;
		String condicion = "AFORO = '" + A.getAforoAula() + "'";

		try {
			abd.modificar(tablas.AULA, condicion, condicion2);
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

	}

	public void actualizarCampus(Campus C, int ID_Campus) {
		abd.establecerConexion();

		String condicion2 = " ID_CAMPUS = " + ID_Campus;
		String condicion = "NOMBRE_CAMPUS = '" + C.getNombreCampus()
				+ "',CIUDAD_CAMPUS = '" + C.getCiudadCampus()
				+ "' , TELEFONO_CAMPUS = " + C.getTelefonoCampus() + "";

		try {
			abd.modificar(tablas.CAMPUS, condicion, condicion2);
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

	}

	public void actualizarCampus2(Campus C, int ID_Campus) {
		abd.establecerConexion();

		String condicion2 = " ID_CAMPUS = " + ID_Campus;
		String condicion = "NOMBRE_CAMPUS = '" + C.getNombreCampus()
				+ "',CIUDAD_CAMPUS = '" + C.getCiudadCampus()
				+ "' , TELEFONO_CAMPUS = " + C.getTelefonoCampus()
				+ ", NUMERO_ALUMNOS = " + C.getNoAlumnos() + "";

		try {
			abd.modificar(tablas.CAMPUS, condicion, condicion2);
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

	}

	public void actualizarGrado(Grado G, int ID_Grado) {
		abd.establecerConexion();

		String condicion2 = " ID_GRADO = " + ID_Grado;
		String condicion = "NOMBRE_GRADO = '" + G.getNombreGrado()
				+ "',INFORMACION_ECONOMICA = " + G.getInforEconomica()
				+ " , CARACTERISTICAS_GRADO = '" + G.getCaracteristicasGrado()
				+ "'";

		try {
			abd.modificar(tablas.GRADO, condicion, condicion2);
		} catch (SQLException e) {

		}

		abd.cerrarConexion();

	}

	public boolean comprobarExiste(String Eleccion) {
		Boolean Elec = false;

		if (Eleccion == "Profesor") {
			if (leerProfesor().size() != 0) {
				Elec = true;
			}
		}
		if (Eleccion == "Alumno") {
			if (leerAlumno().size() != 0) {
				Elec = true;
			}
		}
		if (Eleccion == "Clase") {
			if (leerClase().size() != 0) {
				Elec = true;
			}
		}
		if (Eleccion == "Asignatura") {
			if (leerAsignatura().size() != 0) {
				Elec = true;
			}
		}
		if (Eleccion == "Grado") {
			if (leerGrado().size() != 0) {
				Elec = true;
			}
		}
		if (Eleccion == "Campus") {
			if (leerCampus().size() != 0) {
				Elec = true;
			}
		}
		if (Eleccion == "Aula") {
			if (leerAula().size() != 0) {
				Elec = true;
			}
		}
		if (Eleccion == "Pertenece") {
			if (leerPertenece().size() != 0) {
				Elec = true;
			}
		}

		return Elec;
	}
}
